/**
 * 
 */
package UsedCar;

/**
 * @author fychao
 * 
 */
/**
 * @author fychao
 * 
 */
public class Car {
	/**
	 * @param qal
	 *            世界的品質總物件
	 */
	protected Quality qal;
	/**
	 * @param quals
	 *            這輛車的品質字屬
	 */
	protected String[] quals;
	/**
	 * @param carType
	 *            這輛車子的類型
	 */
	protected int carType;
	/**
	 * @param MAX_QUAL_PER_CAR
	 *            每輛車最多的品質量
	 */
	protected int MAX_QUAL_PER_CAR = 9;
	/**
	 * @param evaledPrice
	 *            鑑價結果
	 */
	protected float evaledPrice = 0;
	/**
	 * @param owner
	 *            這車子的所有人
	 */
	protected Agent owner;
	/**
	 * @param buyFrom
	 *            賣出這輛車的人
	 */
	protected Agent buyFrom;
	/**
	 * @param yr
	 *            可用年限
	 */
	protected int yr;
	/**
	 * @param DEPERCIATION_RATE
	 *            淘汰率
	 */
	public double DEPERCIATION_RATE = 0.05;
	/**
	 * @param ACTUAL_PRICE
	 *            真實的價格
	 */
	public int ACTUAL_PRICE = 0;

	/**
	 * 建立車子
	 * 
	 * @param qal
	 *            世界的品質總物件
	 * @param ct
	 *            車型
	 */
	public Car(Quality qal, int ct) {
		this.setCarType(ct);
		this.setQal(qal);
		initMyQual();
	}

	/**
	 * 產生本車的品質
	 */
	protected void initMyQual() {
		this.quals = this.qal.getRandQual(this.getCarType(), MAX_QUAL_PER_CAR);

		int price = 0;
		for (int i = 0; i < this.quals.length; i++) {
			price += this.qal.getPrice(this.quals[i])
					* (1 - DEPERCIATION_RATE * yr);
		}
		ACTUAL_PRICE = price;
	}

	/**
	 * 多一年
	 */
	public void doAging() {
		this.yr += 1;
	}

	/**
	 * 例出真實的品質、價格
	 */
	public void showActual() {
		System.out.println("YR: " + yr + " QUALs:"
				+ this.qal.listQual(this.quals) + " Price:" + ACTUAL_PRICE);

	}

	public String getSellerString() {
		if (owner.getRole().equals("S")) {
			return ((Seller) owner).sellerString();
		} else {
			return null;
		}
	}

	// ---------------------------------------------------------------------------------------------------------------------------------------------//
	// 變數的 setter and getter
	// ---------------------------------------------------------------------------------------------------------------------------------------------//
	public Quality getQal() {
		return qal;
	}

	public void setQal(Quality qal) {
		this.qal = qal;
	}

	public int getCarType() {
		return carType;
	}

	public void setCarType(int carType) {
		this.carType = carType;
	}

	public String[] getQuals() {
		return quals;
	}

	public void setQuals(String[] quals) {
		this.quals = quals;
	}

	public float getEvaledPrice() {
		return evaledPrice;
	}

	public void setEvaledPrice(float evaledPrice) {
		this.evaledPrice = evaledPrice;
	}

	public int getACTUAL_PRICE() {
		return ACTUAL_PRICE;
	}

	public void setACTUAL_PRICE(int aCTUAL_PRICE) {
		ACTUAL_PRICE = aCTUAL_PRICE;
	}

}
